package io.github.yfblock.frame.Core.Template;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
//import jdk.nashorn.internal.runtime.regexp.joni.Config;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * 模板处理器
 */
public class TemplateHandler {
    Configuration conf;         // FreeMarker配置类
    Class<?> caller;            // 调用者类的class, 为了实现模板调用
    private String rootDir;
    private String staticDir = "static";
    private String viewDir = "templates";
    Map<String, Object> globalData = new HashMap<>();   // 公共数据
    public TemplateHandler(String rootDir) {
        this.rootDir = rootDir;
        try {
            init();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 初始化FreeMarker
     */
    void init() throws IOException {
        // 创建配置对象
        conf = new Configuration(Configuration.VERSION_2_3_31);

        conf.setDefaultEncoding("utf-8");

        File templateDir = new File(rootDir + File.separator + "templates");
        System.out.println("静态资源文件夹: " + templateDir.getAbsolutePath());

        conf.setDirectoryForTemplateLoading(templateDir);
    }

    /**
     * 调用模板引擎显示页面
     * @param templateSrc   模板路径
     * @param data          渲染数据
     * @param out           输出Writer
     * @throws IOException  IO异常
     * @throws TemplateException 模板异常
     */
    public void process(String templateSrc, Map<String, Object> data, Writer out) throws IOException, TemplateException {
        Template template = conf.getTemplate(templateSrc);
        data.putAll(globalData);
        template.process(data, out);
    }
}
